funcmin(A int, B int)int { if A < B { return A } else { return B } }
funcmaxArea(height []int)int { size := len(height) left, right := 0, size-1 max := 0 for { if left >= right { break } dis := min(height[left], height[right]) * (right - left) if max < dis { max = dis } if height[left] <= height[right] { left += 1 } elseif height[left] > height[right] { right -= 1 } } return max }
functhreeSumClosest(nums []int, target int)int { sort.Ints(nums) diff := math.MaxInt64 var l, r, val, dis, res int for i := 0; i < len(nums)-2; i++ { l = i + 1 r = len(nums) - 1 for { if l >= r { break } val = nums[i] + nums[l] + nums[r] dis = int(math.Abs(float64(val - target))) if dis == 0 { return target } elseif diff > dis { diff = dis res = val }
if val < target { l++ } else { r-- } } } return res }
funcfourSum(nums []int, target int) [][]int { ans := make([][]int, 0, 10) if nums == nil || len(nums) < 4 { return ans } sort.Ints(nums) fmt.Println(nums) for i := 0; i < len(nums); i++ { if i > 0 && nums[i] == nums[i-1] { continue } tmp := target - nums[i] for j := i + 1; j < len(nums)-2; j++ { if j > i+1 && nums[j] == nums[j-1] { continue } tmp1 := tmp - nums[j] left, right := j+1, len(nums)-1 for { if left >= right { break }
if nums[left]+nums[right] == tmp1 { ans = append(ans, []int{nums[i], nums[j], nums[left], nums[right]}) for { left += 1 if left < right && nums[left] == nums[left-1] { continue } else { break } }
for { right -= 1 if left < right && nums[right] == nums[right+1] { continue } else { break } } } elseif nums[left]+nums[right] < tmp1 { for { left += 1 if left < right && nums[left] == nums[left-1] { continue } else { break } } } elseif nums[left]+nums[right] > tmp1 { for { right -= 1 if left < right && nums[right] == nums[right+1] { continue } else { break } } }
}
} } return ans }
Leetcode 35. Search Insert Position
查找有序插入的位置,水题
1 2 3 4 5 6 7 8 9 10
funcsearchInsert(nums []int, target int)int { for i := 0; i < len(nums); i++ { if nums[i] == target || nums[i] > target { return i } elseif nums[i] < target && i < len(nums) - 1 && nums[i+1] > target { return i + 1 } } returnlen(nums) }
Leetcode 41. First Missing Positive
Note: Your algorithm should run in O(n) time and uses constant extra space.
funccanJump(nums []int)bool { index := 0 max_index := nums[0] for index <= max_index && index < len(nums) { if index+nums[index] > max_index { max_index = index + nums[index] } index += 1 } if index == len(nums) { returntrue } else { returnfalse } }
funcgenerateMatrix(n int) [][]int { matrix := make([][]int, n) for i := range matrix { matrix[i] = make([]int, n) } if n <= 0 { return matrix } index := 1 for i := 0; i < (n-1)/2+1; i++ { row := i col := i for col < n-i { //右移 matrix[row][col] = index index++ col++ } col-- for row = i + 1; row < n-i; row++ { //下移 matrix[row][col] = index index++ } row-- for col = n - i - 2; col > i; col-- { //左移 matrix[row][col] = index index++ } for row = n - i - 1; row > i; row-- { //上移 matrix[row][col] = index index++ } } return matrix }
funcsetZeroes(matrix [][]int) { var first_row, first_col bool = false, false
//首行首列判断 for i := range matrix { if matrix[i][0] == 0 { first_col = true } } for j := range matrix[0] { if matrix[0][j] == 0 { first_row = true } }
//判断值存储 for i := range matrix { for j := range matrix[0] { if matrix[i][j] == 0 && i != 0 && j != 0 { matrix[i][0] = 0 matrix[0][j] = 0 } } } //非首行首列赋值 for i := range matrix { if matrix[i][0] == 0 && i != 0 { for j := range matrix[0] { matrix[i][j] = 0 } } } for j := range matrix[0] { if matrix[0][j] == 0 && j != 0 { for i := range matrix { matrix[i][j] = 0 } } } //首行首列赋值 if first_row { for j := range matrix[0] { matrix[0][j] = 0 } } if first_col { for i := range matrix { matrix[i][0] = 0 } } }